package 行为型模式.策略模式;

/**
 * 主要组成部分
 * 策略接口 (Strategy Interface): 定义所有支持的算法或行为的公共接口
 * 具体策略类 (Concrete Strategies): 实现策略接口的具体算法类
 * 上下文类 (Context): 持有一个策略对象的引用，并通过策略接口与具体策略交互
 */

interface IPayment
{
	void pay(Double cash);
}

class DefaultPay implements IPayment
{
	@Override
	public void pay(Double cash) {
		System.out.println("无折扣支付:"+cash);
	}
}

class WechatPay implements IPayment
{
	@Override
	public void pay(Double cash) {
		System.out.println("微信支付:"+cash);
	}
}

class Pay implements IPayment
{
	private IPayment iPayment;

	Pay(IPayment iPayment) {
		this.iPayment = iPayment;
	}
	
	@Override
	public void pay(Double cash) {
		iPayment.pay(cash);
	}
}

public class Strategy 
{
	public static void main(String[] args) {
		//只需要创建类就可以有不同的策略
		Pay pay = new Pay(new DefaultPay());
		pay.pay(100d);
		new Pay(new WechatPay()).pay(200d);
	}	
}
